{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "60bd259b-864f-4514-ac0f-62a28bc6ae12",
   "metadata": {},
   "source": [
    "Chapter 30\n",
    "# 一元OLS线性回归\n",
    "Book_1《编程不难》 | 鸢尾花书：从加减乘除到机器学习  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e412ece0-be14-4b49-9f13-f8fe8f99f116",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model import LinearRegression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c13be093-43ea-4d1a-9b79-8e5ce37d58d2",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 生成随机数据\n",
    "num = 50\n",
    "np.random.seed(0)\n",
    "x_data = np.random.uniform(0,10,num)\n",
    "y_data = 0.5 * x_data + 1 + np.random.normal(0, 1, num)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "13468f87-1aad-40e0-b35c-3c9dfccd5d72",
   "metadata": {},
   "outputs": [],
   "source": [
    "x_data = x_data.reshape((-1, 1))\n",
    "# 将x调整为列向量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "7cdd3d78-8da6-44ae-a2d7-2d6d1a7e88de",
   "metadata": {},
   "outputs": [],
   "source": [
    "data = np.column_stack([x_data,y_data])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "fbab3b7c-5000-4004-aa15-1e909c6fd4f7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {color: black;background-color: white;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LinearRegression</label><div class=\"sk-toggleable__content\"><pre>LinearRegression()</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "LinearRegression()"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 创建回归对象并进行拟合\n",
    "LR = LinearRegression()\n",
    "# 使用LinearRegression()构建了一个线性回归模型\n",
    "LR.fit(x_data, y_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "8bc10022-1f62-405a-a60d-cf7dbf45ec96",
   "metadata": {},
   "outputs": [],
   "source": [
    "slope = LR.coef_ # 斜率\n",
    "intercept = LR.intercept_ # 截距"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f4a396a3-3241-4947-801b-fcece92b3e9c",
   "metadata": {},
   "outputs": [],
   "source": [
    "x_array = np.linspace(0,10,101).reshape((-1, 1))\n",
    "# 预测\n",
    "predicted = LR.predict(x_array)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "5e44853a-43b4-4d3f-b9e6-d9d5c3246dfb",
   "metadata": {},
   "outputs": [],
   "source": [
    "data_ = np.column_stack([x_data,LR.predict(x_data)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "499e4f6b-f403-455d-b377-5ca68ceee2af",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-2.0, 8.0)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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NK6g2QTTtm1brFZrtdleQUFBtVmhV3h4OOHh4TV+LNCoMF9EpHEFzQwwLCyM3r17s3z58irXly9fzoABA/w0qvqjwnwRkcYVNAEIcN999/Hqq6/y2muv8f3333PvvfeSnZ3NnXfe6e+hnTEV5ouINK6gWQIFuOGGGzhw4ABPPPEEeXl5dO/enY8//piOHTv6e2j1wluY//iS7VU2xMTbIlQHKCJSz4KqDvBMBXodoJfLbQRMYb6ISKCo79fwoJoBmoU1xEL/zm38PQwRkSYtqO4BioiI1BcFoIiImJICUERETEkBKCIipqQAFBERU1IAioiIKSkARUTElBSAIiJiSgpAERExJQWgiIiYkgJQRERMSQEoIiKmpAAUERFTUgCKiIgpKQBFRMSUFIAiImJKCkARETElBaCIiJiSAlBERExJASgiIqakABQREVNSAIqIiCkpAEVExJQUgCIiYkoKQBERMSUFoIiImJICUERETEkBKCIipqQAFBERU1IAioiIKSkARUTElBSAIiJiSgpAERExJQWgiIiYkgJQRERMSQEoIiKmpAAUERFTUgCKiIgpKQBFRMSUFIAiImJKCkARETElBaCIiJiSAlBERExJASgiIqakABQREVNSAIqIiCkpAEVExJQUgCIiYkoKQBERMSUFoIiImJICUERETEkBKCIipqQAFBERU1IAioiIKSkARUTElBSAIiJiSgpAERExJQWgiIiYkgJQRERMSQEoIiKmpAAUERFTUgCKiIgpBUUA7tq1i9tvv52UlBSaN29O586dmTp1KhUVFf4emoiIBKlQfw+gLn744Qfcbjcvv/wyZ511Flu3buWOO+6gtLSUGTNm+Ht4IiIShCyGYRj+HsTpeP7555k9ezaZmZl1/pzi4mJsNht2u52oqKgGHJ2IiNS3+n4ND4oZYE3sdjutW7c+4XMcDgcOh6PK54DnlygiIsHF+9pdb/M2Iwjt3LnTiIqKMl555ZUTPm/q1KkGoIceeuihRxN6/PTTT/WSJX5dAv3LX/7C448/fsLnbNy4kYsuusj397179zJ48GAGDx7Mq6++esLPPX4GWFRURMeOHcnOzsZms53Z4Juw4uJikpKSyMnJ0VLxCej3VDf6PZ2cfkd1Y7fbSU5OprCwkOjo6DP+en5dAp00aRI33njjCZ/TqVMn35/37t3L0KFD6d+/P3Pm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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax.scatter(x_data, y_data)\n",
    "ax.scatter(x_data, LR.predict(x_data), \n",
    "            color = 'k', marker = 'x')\n",
    "ax.plot(x_array, predicted, \n",
    "        color = 'r')\n",
    "ax.plot(([i for (i,j) in data_], [i for (i,j) in data]),\n",
    "         ([j for (i,j) in data_], [j for (i,j) in data]),\n",
    "         c=[0.6,0.6,0.6], alpha = 0.5)\n",
    "\n",
    "ax.set_xlabel('x'); ax.set_ylabel('y')\n",
    "ax.set_aspect('equal', adjustable='box')\n",
    "ax.set_xlim(0,10); ax.set_ylim(-2,8)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
